# -*-coding: UTF-8 -*-

from Tkinter import *
from Chanson import HAUT, BAS, GAUCHE, DROITE
from thread import *
import winsound
import threading

try:
    from wPIL import Image, ImageTk, ImageOps
except ImportError:
    try:
        from PIL import Image, ImageTk, ImageOps
    except ImportError:
        import sys
        import tkMessageBox
        tkMessageBox.showwarning("Erreur", "S.V.P. Installez PIL pour jouer sur ce système d'exploitation")
        sys.exit()

class VueFrogDance(Frame):
    def __init__(self, parentGUI, width=600, height=400):
        Frame.__init__(self,parentGUI,width=width, height=height)
        self.root = self
        self.largeurSurfaceJeu=width
        self.hauteurSurfaceJeu=height-20
        #self.controleur=Controleur()
        self.f= Frame(self.root,width=self.largeurSurfaceJeu, height=20)
        self.canva=Canvas(self.root,width=self.largeurSurfaceJeu, height=self.hauteurSurfaceJeu, bg='yellow')
        self.milieuBGLargeur = self.largeurSurfaceJeu/4
        self.milieuBGHauteur = self.hauteurSurfaceJeu/2
        self.milieuGrenouilleLargeur = int(self.largeurSurfaceJeu/4 * 1.125)
        self.milieuGrenouilleHauteur = int(self.hauteurSurfaceJeu*7/12)
        self.posFlecheLargeur = int(self.largeurSurfaceJeu*0.55)
        self.posFlecheHauteur = int(self.hauteurSurfaceJeu*0.20)
        self.milieuFlecheLargeur = self.largeurSurfaceJeu * 3/4
        self.milieuFlecheHauteur = self.milieuBGHauteur+self.posFlecheHauteur*3/4
        self.flecheLargeur = int(self.largeurSurfaceJeu*0.40)
        self.flecheHauteur = int(self.hauteurSurfaceJeu*0.60)
        self.fleches = [ #Pour une screen 600x400
                        [470,145,530,195,490,195,490,245,450,245,450,195,410,195,470,145],
                        [470,245,530,195,490,195,490,145,450,145,450,195,410,195,470,245],
                        [420,195,470,135,470,175,520,175,520,215,470,215,470,255,420,195],
                        [520,195,470,135,470,175,420,175,420,215,470,215,470,255,520,195]
                        ] 
        #Pour n'importe quelle screen
        ratioWidth = float(self.largeurSurfaceJeu)/600.0
        ratioHeight = float(self.hauteurSurfaceJeu)/400.0
        for fleche in self.fleches:
            i = 0
            for n in fleche:
                if i%2==0: #x
                    fleche[i] = int(n * ratioWidth)
                else: #y
                    fleche[i] =  int(n * ratioHeight)
                i += 1
        self.fleche = -1;
        self.grenouille = -1
        
        self.tableauImage = []
        self.tableauImage.append(Image.open("MiniJeux/FrogDance/images/danceStill.png"))
        self.tableauImage.append(Image.open("MiniJeux/FrogDance/images/danceFail.png"))
        self.tableauImage.append(Image.open("MiniJeux/FrogDance/images/danceHaut.png"))
        self.tableauImage.append(Image.open("MiniJeux/FrogDance/images/danceBas.png"))
        self.tableauImage.append(Image.open("MiniJeux/FrogDance/images/danceGauche.png"))
        self.tableauImage.append(Image.open("MiniJeux/FrogDance/images/danceDroite.png"))
        
        self.tableauImageTk = []
        self.size=(int(self.largeurSurfaceJeu*0.40),int(self.hauteurSurfaceJeu*0.60))
        
        self.imageBG3=self.imageBG=Image.open("MiniJeux/FrogDance/images/danceBG2.png")
        self.sizeBG2=(self.largeurSurfaceJeu,self.hauteurSurfaceJeu)
        self.imageBG3 = self.imageBG3.resize(self.sizeBG2, Image.ANTIALIAS)
        self.imageBG4=ImageTk.PhotoImage(self.imageBG3)
        self.canva.create_image(self.milieuBGLargeur*2,self.milieuBGHauteur+5,image=self.imageBG4)
        
        self.imageBG=Image.open("MiniJeux/FrogDance/images/danceBG.png")
        self.sizeBG=(int(self.largeurSurfaceJeu*0.50),int(self.hauteurSurfaceJeu*0.80))
        print self.sizeBG
        self.imageBG = self.imageBG.resize(self.sizeBG, Image.ANTIALIAS)
        self.imageBG2=ImageTk.PhotoImage(self.imageBG)
        self.canva.create_image(self.milieuBGLargeur,self.milieuBGHauteur,image=self.imageBG2)
        
        for i in self.tableauImage:
            i=i.convert("RGBA")
            i = i.resize(self.size, Image.ANTIALIAS)
            self.tableauImageTk.append(ImageTk.PhotoImage(i))
        
        #Ajoout des perfect et des good
        self.imagePerfect=Image.open("Minijeux/FrogDance/images/perfect.png")
        self.imageGood=Image.open("Minijeux/FrogDance/images/good.png")
        self.sizePerfGood=(200,50)
        self.imagePerfect=self.imagePerfect.resize(self.sizePerfGood,Image.ANTIALIAS)
        self.imageGood=self.imageGood.resize(self.sizePerfGood,Image.ANTIALIAS)
        self.imagePerfect2=ImageTk.PhotoImage(self.imagePerfect)
        self.imageGood2=ImageTk.PhotoImage(self.imageGood)
        self.oldScore=0;
        
        self.i = 0
        self.couleurs = ['green','blue','gray','purple']
        self.f.pack(side=TOP, expand=1, fill=X)
        self.canva.pack(side=BOTTOM)
        
        self.dessinerJeu()
        self.chanson = None
        self.timer = None
    
    def start(self):
        self.listenersDeTouches = [
                                self.f.bind_all("<Up>", lambda x:self.afficherMove(HAUT)),
                                self.f.bind_all("<Down>", lambda x:self.afficherMove(BAS)),
                                self.f.bind_all("<Right>", lambda x:self.afficherMove(DROITE)),
                                self.f.bind_all("<Left>", lambda x:self.afficherMove(GAUCHE)),
                                ]
        self.root.after(10, self.getMoveCourant)
        
    def pack_forget(self):
        if self.chanson:
            self.chanson.join(0.05)
        if self.timer:
            self.timer.cancel()
        self.destroy()
        Frame.pack_forget(self)
    
    def dessinerJeu(self):
        #Dessinne la grenouille et les composants graphiques de FrogDance
        
        #Le titre du mini-jeu
        #Ce serait cool de remplacer les titres par des images qui ont des points communs
        l=Label(self.f,text="FROGDANCE", bg='red', foreground='green')
        l.pack(side=TOP, fill='both', expand=1)

        self.showFrogStill()
    
    def showFrogStill(self):
        self.after(5, lambda  : self.canva.delete('grenouille'))
        self.after(5, lambda  : self.canva.create_image(self.milieuGrenouilleLargeur,self.milieuGrenouilleHauteur,image=self.tableauImageTk[0],tags='grenouille'))
    
    def getMoveCourant(self):
        self.afficherScore()
        move=self.parent.getMoveCourant()
        x = self.posFlecheLargeur
        y = self.posFlecheHauteur
        larg = self.flecheLargeur
        haut = self.flecheHauteur
        self.canva.delete(self.fleche)
        if move==HAUT:
            self.fleche=self.canva.create_polygon(*self.fleches[0], fill = self.couleurs[self.i%len(self.couleurs)])
        elif move==BAS:
            self.fleche=self.canva.create_polygon(*self.fleches[1], fill = self.couleurs[self.i%len(self.couleurs)])
        elif move==GAUCHE:
            self.fleche=self.canva.create_polygon(*self.fleches[2], fill = self.couleurs[self.i%len(self.couleurs)])
        elif move==DROITE:
            self.fleche=self.canva.create_polygon(*self.fleches[3], fill = self.couleurs[self.i%len(self.couleurs)])

        self.root.after(50, self.getMoveCourant)
    
    def afficherMove(self, move):
        b = self.parent.envoyerMove(move)
        self.canva.delete('grenouille')
        if not b:
            self.grenouille = self.canva.create_image(self.milieuGrenouilleLargeur,self.milieuGrenouilleHauteur,image=self.tableauImageTk[1],tags='grenouille')
        elif move==HAUT:
            self.grenouille = self.canva.create_image(self.milieuGrenouilleLargeur,self.milieuGrenouilleHauteur,image=self.tableauImageTk[2],tags='grenouille')
        elif move==BAS:
            self.grenouille = self.canva.create_image(self.milieuGrenouilleLargeur,self.milieuGrenouilleHauteur,image=self.tableauImageTk[3],tags='grenouille')
        elif move==GAUCHE:
            self.grenouille = self.canva.create_image(self.milieuGrenouilleLargeur,self.milieuGrenouilleHauteur,image=self.tableauImageTk[4],tags='grenouille')
        elif move==DROITE:
            self.grenouille = self.canva.create_image(self.milieuGrenouilleLargeur,self.milieuGrenouilleHauteur,image=self.tableauImageTk[5],tags='grenouille')
        else:
            self.grenouille = self.canva.create_image(self.milieuGrenouilleLargeur,self.milieuGrenouilleHauteur,image=self.tableauImageTk[1],tags='grenouille')
        if self.timer:
            self.timer.cancel()
        self.timer = threading.Timer(0.35, self.showFrogStill)
        self.timer.start()
        self.i += 1
    
    def jouerChanson(self, cheminMP3):
        self.chanson = threading.Thread(None, lambda : winsound.PlaySound(cheminMP3, winsound.SND_FILENAME|winsound.SND_NOWAIT))
        self.chanson.start()

    def afficherScore(self):
        self.canva.delete("score")
        text = ''
        js = self.parent.getJoueurs()
        for joueur in js.values():
            text += joueur.nom+": "+str(joueur.score)+"\n"
            #print joueur.score
        self.affResultTemps(js[self.parent.nomJoueur].score)
        self.canva.create_text(self.largeurSurfaceJeu*3/4, 50,text=str(text), font=('Helvetica', 10), tags="score")
        pass
    
    def affResultTemps(self, scoreTotal):
        score=scoreTotal-self.oldScore
        self.oldScore = scoreTotal
        if score>=6:
            imageScore=self.canva.create_image(self.milieuFlecheLargeur,self.milieuFlecheHauteur,image=self.imagePerfect2, tags="perfect")
            #print "PERFECT"
            self.root.after(700, lambda : self.canva.delete("perfect"))
        elif score <6 and score>3:
            imageScore=self.canva.create_image(self.milieuFlecheLargeur,self.milieuFlecheHauteur,image=self.imageGood2, tags="good")
            print "GOOD"
            self.root.after(700, lambda : self.canva.delete("good"))
        #else:
            ##print "YEP", score
    
if __name__ == '__main__':
    pass
    #VueFrogDance(None)
    